package com.huike.springboot1.demos.controller;

import com.huike.springboot1.demos.pojo.Product;
import com.huike.springboot1.demos.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class AdminProductController {
    @Autowired
    ProductService productService;
    //网络路径(项目路径)
    @GetMapping("/productTable")
//    控制层通过访问项目路径，可以将数据库中的数据以products为参数名传递到productList页面
//    Model：是SpringMVC中的"M“：模型(数据),前后端交互时的数据模型,后端向前端传递数据使用model    "V"：视图(页面)
    public ModelAndView getProductList(ModelAndView modelAndView) {
        //TODO
//        model将数据作为products参数传递productList(视图)，括号内的内容是，参数名,参数值
        modelAndView.addObject("products", productService.getProductList());
        modelAndView.setViewName("admin/productTable");
        return modelAndView;
    }
    @RequestMapping("/deleteProduct")
    public String deleteProduct(Long id,Model model) {
//        增删改一条数据操作，不需要返回类型，在数据库中增删改一条数据就是返回int的数字类型的行数，没有返回数据类型的意义
        productService.deleteProductById(id);
        //TODO
//        model将数据作为products参数传递productList(视图)，括号内的内容是，参数名,参数值
        model.addAttribute("products", productService.getProductList());
        return "admin/productTable";//返回一个在templates路径下的页面名称，productList是templates里的文件
        // 传递到页面的数据product可以通过美元符号$进行获取 ，在全局配置文件中设置页面文件路径

    }


//    常用项目访问路径
    @GetMapping("/productTable1")
    public ModelAndView getProductList1(ModelAndView modelAndView) {
        //TODO
//        model将数据作为products参数传递productList(视图)，括号内的内容是，参数名,参数值
        modelAndView.addObject("products", productService.getProductList());
        modelAndView.setViewName("admin/productTable1");
        return modelAndView;
    }
    @DeleteMapping("/deleteProduct1")
    @ResponseBody //把数据转为json格式，返回json格式数据，返回的是字符串，而不会作为页面传递
    public String deleteProduct1(Long id,Model model) {
        productService.deleteProductById(id);
        model.addAttribute("products", productService.getProductList());
        return "OK";
    }

    //纯新增部分：
    @GetMapping("/productTabList")
    public String tabListProduct(Model model) {         // 新增
        model.addAttribute("product", new Product());
        return "admin/productTabList";    // html页面
    }

    @PostMapping("/postProductList")
    public String postProduct(Product product,Model model) {
        productService.insertProduct(product);   // 新增
        System.out.println("收到商品：" + product);//测试是否能接收到数据
        return "redirect:/productTabList1";//点击新增后刷新页面，否则会导致表单数据存在而重复插入
    }

//    打开表单页（新增/修改）
    @GetMapping("/productTabList1")
    public String tabListProduct1(@RequestParam(required = false) Long id,
                                 Model model) {
        if (id != null) {                 // 修改
            Product product = productService.selectProductById(id);
            model.addAttribute("product", product);
        } else {                          // 新增
            model.addAttribute("product", new Product());
        }
        return "admin/productTabList1";    // html页面
    }

    @PostMapping("/postProductList1")
    public String postProduct1(Product product) {
//        根据id是否存在来判断是要插入还是修改
        if (product.getId() == null) {
            productService.insertProduct(product);   // 新增
            System.out.println("收到商品："+product);//测试是否能接收到数据
            return "redirect:/productTabList1";//点击新增后刷新页面，否则会导致表单数据存在而重复插入
        } else {
            productService.updateProductById(product);   // 修改
            System.out.println("收到商品："+product);//测试是否能接收到数据
            return "admin/productTabList1";//点击后不会刷新页面，内容还在
        }
    }

}
